package pe.gob.foncodes.ssa.web.controller;

import java.text.SimpleDateFormat;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.apache.log4j.Logger;

import pe.gob.foncodes.ssa.bs.common.controller.GenericController;
import pe.gob.foncodes.ssa.bs.common.util.ServiceException;
import pe.gob.foncodes.ssa.bs.seguridad.domain.General;
import pe.gob.foncodes.ssa.bs.seguridad.domain.Usuario;
import pe.gob.foncodes.ssa.bs.seguridad.domain.Zonal;
import pe.gob.foncodes.ssa.web.beans.UsuarioBean;
import pe.gob.foncodes.ssa.web.util.Impresion;

public class ReporteUsuarioController extends GenericController {
    protected static Logger log = Logger.getLogger(ReporteUsuarioController.class);
    
    private String busCodUsuario;
    private String busNomUsuario;
    private String busTipoUsuario;
    private String busIdUnidadTerritorial;
    boolean busBloqueado;
    boolean busActivo;
    private java.util.Date busFechaDesde;
    private java.util.Date busFechaHasta;
    
    private List<General> lstTipoUsuario;    
    private List<Zonal> lstUnidadTerritorial;
    private List<UsuarioBean> lstUsuarios;
    
    @Override
    public void init(){
        this.busBloqueado=false;
        this.busActivo=false;
        lstUsuarios = new ArrayList<UsuarioBean>();
        //setBeanList(lstUsuarios);
    }

    @Override
    public void search(ActionEvent event) throws Exception{
        log.info("Ejecutando filtro reporte");
        log.info(String.format("{0}{1}","busCodUsuario:", busCodUsuario));
        log.info(String.format("{0}{1}","busNomUsuario:", busNomUsuario));
        log.info(String.format("{0}{1}","busActivo:", busActivo));
        log.info(String.format("{0}{1}","busTipoUsuario:", busTipoUsuario));
        log.info(String.format("{0}{1}","busIdUnidadTerritorial:", busIdUnidadTerritorial));
        log.info(String.format("{0}{1}","busBloqueado:", busBloqueado));
        log.info(String.format("{0}{1}","busFechaDesde:", busFechaDesde));
        log.info(String.format("{0}{1}","busFechaHasta:", busFechaHasta));
        
        this.busCodUsuario=(this.busCodUsuario == null)?null:this.busCodUsuario.trim().toUpperCase();
        this.busNomUsuario=(this.busNomUsuario == null)?null:this.busNomUsuario.trim().toUpperCase();
        
        String strNomUsuario = (this.busNomUsuario == null)?null:this.busNomUsuario + "%";
        String strActivo = (busActivo) ? "1" : null;
        String strBloqueado = (busBloqueado) ? "1" : null;
                
        Date fecDesde = (this.busFechaDesde == null) ? null : new Date(this.busFechaDesde.getTime());
        Date fecHasta = (this.busFechaHasta == null) ? null : new Date(this.busFechaHasta.getTime());
        
        List<Object[]> olstUsuarios = getService().findByNamedQuery("Usuario.findByReporte",
                                                                                new Object[]{strActivo
                                                                                           , strBloqueado
                                                                                           , this.busCodUsuario
                                                                                           , strNomUsuario
                                                                                           , this.busTipoUsuario
                                                                                           , this.busIdUnidadTerritorial
                                                                                           /*, fecDesde
                                                                                           , fecHasta*/});
        this.lstUsuarios = new ArrayList<UsuarioBean>();
        for(Object[] obj: olstUsuarios){
            UsuarioBean oUsuario = new UsuarioBean();
            oUsuario.setCOD_USUARIO((String)obj[0]);
            oUsuario.setNOMBRES((String)obj[1]);
            oUsuario.setTIPO_USUARIO((String)obj[2]);
            oUsuario.setUNIDAD_TERRITORIAL((String)obj[3]);
            oUsuario.setFECHA_REGISTRO("01/01/2013");
            this.lstUsuarios.add(oUsuario);
        }        
        //setBeanList(this.lstUsuarios);
    }
    
    public void limpiar(){
        this.busCodUsuario="";
        this.busNomUsuario="";
        this.busActivo=false;
        this.busTipoUsuario="";
        this.busIdUnidadTerritorial="";
        this.busBloqueado=false;
        
        this.lstUsuarios = new ArrayList<UsuarioBean>();    
        //setBeanList(this.lstUsuarios);
    }
    
    public void print() {
        try {
            Collection col = new ArrayList();
            for (UsuarioBean oUsuario : this.lstUsuarios) {
                col.add(oUsuario);
            }
            Impresion imprimir = new Impresion();
            imprimir.imprimirListado("ssa_rpt_usuarios_listado", col);
        } catch (Exception ex) {
            log.error(ex);
        } finally {
            FacesContext.getCurrentInstance().responseComplete();
        }
    }
    
//    
//    @Override
//    public boolean validate() throws Exception{
//        boolean success = true;
//        
//        return success;
//    }

    public String getBusCodUsuario() {
        return busCodUsuario;
    }

    public void setBusCodUsuario(String busCodUsuario) {
        this.busCodUsuario = busCodUsuario;
    }

    public java.util.Date getBusFechaDesde() {
        return busFechaDesde;
    }

    public void setBusFechaDesde(java.util.Date busFechaDesde) {
        this.busFechaDesde = busFechaDesde;
    }

    public java.util.Date getBusFechaHasta() {
        return busFechaHasta;
    }

    public void setBusFechaHasta(java.util.Date busFechaHasta) {
        this.busFechaHasta = busFechaHasta;
    }

    public String getBusIdUnidadTerritorial() {
        return busIdUnidadTerritorial;
    }

    public void setBusIdUnidadTerritorial(String busIdUnidadTerritorial) {
        this.busIdUnidadTerritorial = busIdUnidadTerritorial;
    }

    public String getBusNomUsuario() {
        return busNomUsuario;
    }

    public void setBusNomUsuario(String busNomUsuario) {
        this.busNomUsuario = busNomUsuario;
    }

    public String getBusTipoUsuario() {
        return busTipoUsuario;
    }

    public void setBusTipoUsuario(String busTipoUsuario) {
        this.busTipoUsuario = busTipoUsuario;
    }

    public List<General> getLstTipoUsuario() throws ServiceException {
        this.lstTipoUsuario = getService().findByNamedQuery("General.findByTxtDominioEstado"
                                                        , new Object[]{"TIPO_USUARIO","1"});                
        return lstTipoUsuario;
    }

    
    public List<UsuarioBean> getLstUsuarios() {
        return lstUsuarios;
    }

    public void setLstUsuarios(List<UsuarioBean> lstUsuarios) {
        this.lstUsuarios = lstUsuarios;
    }

    public boolean isBusBloqueado() {
        return busBloqueado;
    }

    public void setBusBloqueado(boolean busBloqueado) {
        this.busBloqueado = busBloqueado;
    }

    public boolean isBusActivo() {
        return busActivo;
    }

    public void setBusActivo(boolean busActivo) {
        this.busActivo = busActivo;
    }

    public List<Zonal> getLstUnidadTerritorial() throws ServiceException {
        this.lstUnidadTerritorial = getService().findByNamedQuery("Zonal.findAll");
        return lstUnidadTerritorial;
    }

    public void setLstUnidadTerritorial(List<Zonal> lstUnidadTerritorial) {
        this.lstUnidadTerritorial = lstUnidadTerritorial;
    }
}
